14
תגובות
שלום, אני מתחיל בביטויים רגולרים ולא הבנתי איך משתמשים ב preg_replace, למשל יש לי את המחרוזת הבאה:
<img src="link" />


אני רוצה שהוא יקח את כל הזה, יוסיף מסביבו span, ואת כל מה שהוא מוצא בתוך הסוגריים שישים שם עוד span, הבנתי איך למצוא את זה אבל איך אני מוסיף בנוסף לקיים משהו?

14 תשובות

avatar ענה vu47678 ב 22 למרץ 2014 #

$v = 'netanel';
$string = preg_replace("/(.*)/", "<h1>$1</h1>", $v);

avatar ענה yotamN ב 22 למרץ 2014 #

@vu47678 יכול להיות שהגבת לפני העריכה אבל מאיפה הבאת את ה $1? אפשר הסבר מפורט על זה?

avatar ענה vu47678 ב 23 למרץ 2014 #

ה $1 זה מה שמוחזר לך מהערך שאתה מציב בסוגריים בפרמטר הראשון שהפונקציה מקבלת, במקרה זה עשיתי הכל כפי שאתה רואה, אבל אתה יכול לעשות איזה ביטויים שאתה רוצה,
ואז אתה יכול להכניס את הערך הזה לפרמטר השני.
אז מה שעשיתי פה לקחתי את כל הביטוי ושמתי אותו בתוך תגית H1.

avatar ענה zacharya ב 23 למרץ 2014 #

$v = 'netanel';
$string = preg_replace("#(.+)#", "<h1>\\1</h1>", $v);


קוד יותר טוב, אם תפעיל את הקוד שלך @vu47678 הוא יעטוף את מה שנתת לו בתגית אבל גם אחרי יפתח ויסגור את התגית בלי כלום בפנים.
(שים לב שהשתמשת בכוכבית ולא פלוס).
(\\1 - שווה ל$1).

avatar ענה yotamN ב 24 למרץ 2014 #

יש לי שאלה, ואם אני רוצה לחפש משהו שלפני netanel יהיה לי למשל My name אבל שהוא לא ישים את זה ב H1, איך אני עושה את זה? אני שם את זה מחוץ לסוגריים?

avatar ענה zacharya ב 24 למרץ 2014 #

לא הבנתי את הכוונה שלך, אתה בעצם רוצה למצוא אם יש My name במחרוזת?

avatar ענה yotamN ב 24 למרץ 2014 #

אני רוצה למצוא אם יש my name netanel אבל שיכניס רק את netanel לתג

avatar ענה zacharya ב 24 למרץ 2014 #

$v = 'my name netanel';
$string = preg_replace("#my name (.+)#", "my name <h1>\\1</h1>", $v);

הפונקציה שומרת רק מה שבתוך סוגריים, אם הייתי מוסיף סוגריים נוספות אחריי הייתי קורא למה שבפנים כ//2.

avatar ענה yotamN ב 24 למרץ 2014 #

יש לי את הקוד הזה:

<?php
  $lines = file('files/txt/settings.txt');
  $name = 'DatabaseUsername';
  foreach ($lines as $line) {
    echo $line.'<br />';
    if(preg_replace("#$name = '(.+)'#", $line)) {
      $nline = preg_replace("#$name = '(.+)'#", "My name is <h1>\\1</h1>", $line);
      echo $nline.'<br />';
    }
  }


ואת הקובץ הזה:
DatabaseUsername = 'yotam'
DatabasePassword = '1234'
DatabaseName = 'yotam'
DatabaseServer = 'localhost'


הפלט אמור להיות ככה:
DatabaseUsername = 'yotam'
my name is <h1>yotam</h1>
DatabasePassword = '1234'
DatabaseName = 'yotam'
DatabaseServer = 'localhost'


אתה יודע אולי מה לא נכון כאן?

avatar ענה zacharya ב 24 למרץ 2014 #

אני לא מבין את המטרה של הIF שלך, אתה כנראה מתכוון לעשות חיפוש אם "#$name = '(.+)'#" נמצא במחרוזת, במקרה הזה הקוד שלך צריך להיות:

$lines = file('settings.txt');
  $name = 'DatabaseUsername';
  foreach ($lines as $line) {
    echo $line.'<br />';
    if(preg_match("#$name = '(.+)'#", $line)) {
      $nline = preg_replace("#$name = '(.+)'#", "My name is <h1>\\1</h1>", $line);
      echo $nline.'<br />';
    }
  }

avatar ענה yotamN ב 24 למרץ 2014 #

אני נאלץ לעבוד עם JS מכמה סיבות, אךי אני עושה את אותו הקוד בדיוק בJS? ראיתי שיש אפשרות של replace אבל לא הבנתי איך אני משתמש שם במשתנים

avatar ענה zacharya ב 25 למרץ 2014 #

אתה רושם את שם המשתנה, ואז נקודה, ואז replace:

var str = "my Name is yoyo";
alert(str.replace("\W", "<h1>\\1</h1>"));

avatar ענה yotamN ב 27 למרץ 2014 #

הקוד הזה:

var str = "my Name is yoyo";
alert(str.replace("#my Name is (.*)#i", "\\1"));


לא עובד לי, הוא עדיין עושה alert לכל הטקסט

avatar ענה zacharya ב 27 למרץ 2014 #

var str = "my Name is yoyo";
alert(str.replace(/my Name is (.*)/g, "\\1"));